package cn.bonoon.kernel.expression;

/**
 * <pre>
 * 通过参数进行传值，有两种方式：get和post方式
 * 
 * 只要创建了新的条件对象，则认为已经对{@link #name}和{@link #value}进行了正确的赋值，以后不再检查这些赋值情况的正确性！ 
 * </pre>
 * @author jackson
 *
 */
public class QueryExpressionParameter {
	
	/**参数名，通过该名字，可以从控制器里取得该参数的值*/
	protected final String name;
	
	/** 参数值的js取值的表达式，如:jQuery('#xxxid').val()、jQuery('#xxxid').datebox('value')等方式*/
	protected final String value;
	
	protected final QueryExpressionParameterMode type;
	
	//临时，参数类型
	private String parameterType;
	
	public QueryExpressionParameter(String name, String value, QueryExpressionParameterMode type) {
		this.name = name;
		this.value = value;
		this.type = type;
	}
	
	public QueryExpressionParameter(String name, String value) {
		this(name, value, QueryExpressionParameterMode.DIRECT);
	}

	/**<pre>通过post方式提交的值
	 * 
	 * 格式如：
	 * id:1
	 * name:jQuery('#name').val()</pre>*/
	public void parameter(StringBuilder params){
		params.append(name.replace('.', '_')).append(':');
		value(params);
	}
	
	/**<pre>在url地址上的参数，即url通过"?"号传参
	 * 
	 * 格式如：
	 * www.bonoon.cn/s/test.do?id=1&name=bonoon</pre>*/
	public void request(StringBuilder href){
		href.append(name.replace('.', '_')).append('=');
		value(href);
	}
	
	public void value(StringBuilder sb){
		type.parse(sb, value);
	}
	
	public boolean check(QueryExpressionParameter other){
		return name.equals(other.name);
	}
	
	public String getName() {
		return name;
	}
	
	public String getValue() {
		return value;
	}

	public String getParameterType() {
		return parameterType;
	}

	public void setParameterType(String parameterType) {
		this.parameterType = parameterType;
	}
}